Applogic — сервис сценариев поведения устройства
Applogic, сокращение от “Application Logic” — это сервис в составе встраиваемого ПО, предназначенный для гибкой настройки работы микроэлектронного прибора посредством пользовательских сценариев на языке скриптов Lua.
Правила
В зависимости от прикладной задачи оператор устройства или инженер-пусконаладчик имеет возможность настроить прибор на выполнение требуемой логики. Это реализуется с помощью правил, которые предписывают сервису Applogic тот или иной сценарий работы системы.
Быструю иллюстрацию сценариев можно показать на примере ПО беспроводного роутера, выполнив в консоли прибора командцуу applogic list:
root@OpenWrt:~# applogic list
root@OpenWrt:~# applogic list
"01_rule": "Правило переключения если нет Cим-карты в слоте
"02_rule": "Правило переключения Cим-карты при отсутствии регистрации в сети",
"03_rule": "Правило переключения Сим-карты, если баланс ниже минимума",
"04_rule": "Правило переключения Сим-карты при отсутствии PING сети",
"06_rule": "Мигание светодиода LED1 - уровень сигнала",
"14_rule": "Автоопределение провайдера",
"16_rule": "Правило для управления роутером по СМС.",
"19_rule": "Журналирование событий Микроконтроллера",
"20_rule": "Журналирование - статус интерфейса MODEM
Логические узлы
Правила состоят из логических узлов, которые обрабатываются последовательно — от первого до последнего. Узел - это простая таблица, содержащая операторы узла.
Простейший пример логического узла
----------------------------
-- Узел "N1_Signal_Strength"
----------------------------
-- Получить посредством шины UBUS значение
-- уровня сигнала от базовой станции GSM-оператора
----------------------------
N1_Signal_Strength = { -- Имя логического узла
{
["load-ubus"] = function(nodes) -- Оператор узла, выполняющий запрос к системной шине
return {
ubus = "tsmodem.driver", -- Имя объекта на системной шине
method = "signal", -- Вызываемый метод
params = {}, -- без параметров
}
end
},
{
-- следующий оператор узла
-- и т.д.
}
}
Операторы узла
Оператор узла — это типовая функция, предназначенная для решения одной узкоспециализированной задачи. Например, обращение к системной шине, обращение к периферийному устройству по заданному протоколу, передача вычисленных значений в интерфейс пользователя и т.п.
Базовый (предустановленный) набор операторов
| Оператор | Назначение |
|---|---|
[load-ubus] |
Получает данные по системной шине UBUS Подробнее |
[subscribe] |
Подписывает логический узел на событие системной шины Подробнее |
[skip] |
Пропускает обработку следующих за ним операторов узла Подробнее |
[frozen] |
Предназначен для задержки (заморозки) вычисленного в узле значения на заданное время Подробнее |
[save] |
Сохраняет вычисленное значение узла для использования в следующей итерации обработки правил Подробнее |
[timeout] |
Включает обратный отсчёт заданного количества секунд Подробнее |
[websocket] |
Передаёт данные в веб-интерфейс (или панель индикации) Подробнее |
[journal] |
Обеспечивает журналирование данных, вычисляемых в узлах правила Подробнее |
[break] |
Прерывает выполнение текущего правила в зависимости от заданных условий Подробнее |
Инженер-пусконаладчик также может написать собственный пользовательский оператор на языке скриптов Lua.
Общий синтаксис для всех операторов узла
-- [[ Пример узла с названием "N1_example_node", в котором последовательно выполняются ]]
-- [[ три оператора: ["load-ubus"], ["timeout"] и ["ui-update"]. ]]
N1_example_node = {
{
["load-ubus"] = function(nodes)
return {
-- table of [load-ubus] operator's parameters
}
end
},
{
["timeout"] = function(nodes)
return {
-- table of [timeout] operator's parameters
}
end
},
{
["ui-update"] = function(nodes)
return {
-- table of [ui-update] operator's parameters
}
end
}
}